package com.设计模式;

/*
     顾名思义，装饰模式就是给一个对象增加一些新的功能，而且是动态的，要求装饰对象和被装饰对象实现同一个
     接口，装饰对象持有被装饰对象的实例。
* */
public class 装饰器模式
{
    public static void main(String[] args)
    {
        Source1 source = new Source1();
        Sourceable obj = new Decorator(source);
        obj.method();
    }
}

interface Sourceable
{
    public void method();
}

class Source1 implements Sourceable
{

    @Override
    public void method()
    {
        System.out.println("this is a original method!");
    }
}

class Decorator implements Sourceable
{
    private Source1 source1;

    public Decorator(Source1 source1)
    {
        super();
        this.source1 = source1;
    }

    @Override
    public void method()
    {
        System.out.println("before decorator");
        source1.method();
        System.out.println("after decorator");
    }
}
